Deserialization হল সেই প্রক্রিয়া যার মাধ্যমে একটি serialized object কে আবার তার original object আকারে পুনঃস্থাপন করা হয়। Java তে serialization এর মাধ্যমে একটি অবজেক্টকে বাইনারি ফরম্যাটে রূপান্তর করা হয়, এবং deserialization এর মাধ্যমে সেই বাইনারি ডেটা থেকে অবজেক্ট পুনরুদ্ধার করা হয়।
Apache Commons IO লাইব্রেরি সোজা ও সহজ উপায়ে deserialization প্রক্রিয়া পরিচালনার জন্য ইউটিলিটি সরবরাহ করে। এই লাইব্রেরির ObjectInputStream ক্লাসের মাধ্যমে ফাইল বা স্ট্রিম থেকে অবজেক্ট ডেসিরিয়ালাইজ করা যায়। তবে, এটি Java I/O API এর সাথে কাজ করার মাধ্যমে Apache Commons IO ব্যবহার করা যেতে পারে।
নিচে আমরা serialized object থেকে data deserialization এর কার্যক্রম বিস্তারিতভাবে দেখব।
যথাযথভাবে deserialization সম্পন্ন করার জন্য, প্রথমে একটি অবজেক্টকে serialization করতে হবে। এতে অবজেক্টটি বাইনারি ফরম্যাটে রূপান্তরিত হয়, যা পরে deserialize করা যাবে।
import java.io.*;
class Person implements Serializable {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter Methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class ObjectSerializationExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
// Serialize the object
oos.writeObject(person);
System.out.println("Object serialized successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
Deserialization এর মাধ্যমে সিরিয়ালাইজড অবজেক্ট থেকে ডেটা পুনরুদ্ধার করা হয়। এখানে ObjectInputStream ব্যবহার করে ফাইল থেকে সিরিয়ালাইজড অবজেক্টকে পুনরুদ্ধার করা হয়।
import java.io.*;
class Person implements Serializable {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter Methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class ObjectDeserializationExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
// Deserialize the object
Person person = (Person) ois.readObject();
// Display the deserialized object's data
System.out.println("Deserialized Object:");
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
এখানে:
Apache Commons IO এর মাধ্যমে আপনি সরাসরি ObjectInputStream অথবা ObjectOutputStream ক্লাসের মাধ্যমে অবজেক্ট সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে পারবেন। তবে Apache Commons IO লাইব্রেরি সেগুলি সরাসরি পরিচালনা না করলেও, এটি stream management এবং I/O utilities এর জন্য সাহায্য করতে পারে। এখানে FileUtils এবং IOUtils ক্লাসের মাধ্যমে আরো সহজভাবে স্ট্রিমের সাথে কাজ করা যেতে পারে।
import org.apache.commons.io.FileUtils;
import java.io.*;
import java.nio.file.FileSystems;
import java.nio.file.Files;
class Person implements Serializable {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter Methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class ApacheCommonsDeserializationExample {
public static void main(String[] args) {
try {
// Read the serialized object using FileUtils
byte[] data = FileUtils.readFileToByteArray(new File("person.ser"));
// Deserialize the object from byte array
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
Person person = (Person) ois.readObject();
// Display the deserialized object's data
System.out.println("Deserialized Object:");
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
ois.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
এখানে:
Deserialization প্রক্রিয়া কখনও কখনও ধীর হতে পারে, বিশেষত যখন বড় সাইজের অবজেক্ট বা কমপ্লেক্স অবজেক্ট মডেল ব্যবহৃত হয়। এর পারফরম্যান্স উন্নত করার জন্য কিছু সাধারণ কৌশল হতে পারে:
Apache Commons IO লাইব্রেরি সরাসরি deserialization কাজের জন্য ব্যবহার না করলেও, এটি ফাইল এবং স্ট্রিম সম্পর্কিত সাধারণ কার্যক্রমে সহায়ক। Java I/O API এর মাধ্যমে সিরিয়ালাইজড অবজেক্ট থেকে ডেটা ডেসিরিয়ালাইজ করা সম্ভব এবং Apache Commons IO এর বিভিন্ন ইউটিলিটি যেমন FileUtils এবং IOUtils ব্যবহার করে ফাইলের ডেটা সহজেই পরিচালনা করা যেতে পারে। Performance এবং Security সম্পর্কে সচেতন থাকতে হবে যখন আপনি serialization এবং deserialization প্রক্রিয়া সম্পন্ন করেন।
common.read_more